#ifndef CAMERA_H
#define CAMERA_H

#include "Core/timestep.h"
#include "Events/event.h"
#include <glm/glm.hpp>

namespace CC {

	class Camera
	{
	public:
		Camera() = default;
		Camera(const glm::mat4& projection)
			: m_Projection(projection) {}

		virtual ~Camera() = default;

        virtual void OnUpdate(Timestep ts) = 0;
		virtual void OnEvent(Event& e) = 0;

		const glm::mat4& GetProjection() const { return m_Projection; }
		virtual const glm::mat4& GetViewMatrix() const = 0;
		virtual const glm::mat4& GetViewProjectionMatrix() const = 0;
        void SetProjection(glm::mat4& projection){
            m_Projection = projection;
        }

		virtual glm::vec3& GetPosition() { return glm::vec3(0.0); }
        virtual float* GetPositionPointer() { return NULL; }
		virtual glm::vec3 GetTargetPosition() const { return glm::vec3(0.0); }
		virtual glm::vec3 GetUpAxis() const { return glm::vec3(0.0, 1.0, 0.0); }

	protected:
		glm::mat4 m_Projection = glm::mat4(1.0f);
	};

}

#endif